home *** CD-ROM | disk | FTP | other *** search
- property pFirstSprite, pLastSprite, pOpenSpot, pGameOverFrame, pSlideSound, pPieceWidth, pPieceHeight, pUpperLeftLoc, pMode
- global checkForMovieOver
-
- on getPropertyDescriptionList me
- list = [:]
- addProp(list, #pFirstSprite, [#comment: "First Sprite", #format: #integer, #default: 31])
- addProp(list, #pLastSprite, [#comment: "Last Sprite", #format: #integer, #default: 45])
- addProp(list, #pOpenSpot, [#comment: "Open Spot (point(x,y))", #format: #point, #default: point(4, 4)])
- addProp(list, #pSlideSound, [#comment: "Slide Sound", #format: #string, #default: EMPTY])
- addProp(list, #pGameOverFrame, [#comment: "Game Over Frame", #format: #marker, #default: #next])
- return list
- end
-
- on beginSprite me
- pUpperLeftLoc = sprite(pFirstSprite).loc
- pMode = #normal
- randomizePieces(me)
- end
-
- on randomizePieces me
- posList = []
- s = pFirstSprite
- repeat while s <= pLastSprite
- add(posList, sprite(s).loc)
- s = 1 + s
- end repeat
- s = pFirstSprite
- repeat while s <= pLastSprite
- r = random(posList.count)
- sprite(s).loc = posList[r]
- deleteAt(posList, r)
- s = 1 + s
- end repeat
- end
-
- on clickPuzzle me, spriteNumber
- if pMode <> #normal then
- exit
- end if
- pPieceWidth = sprite(pFirstSprite).width
- pPieceHeight = sprite(pFirstSprite).height
- x = ((sprite(spriteNumber).locH - pUpperLeftLoc.locH) / pPieceWidth) + 1
- y = ((sprite(spriteNumber).locV - pUpperLeftLoc.locV) / pPieceHeight) + 1
- if pOpenSpot.locV = y then
- if pOpenSpot.locH = (x - 1) then
- move(me, spriteNumber, -1, 0)
- else
- if pOpenSpot.locH = (x + 1) then
- move(me, spriteNumber, 1, 0)
- end if
- end if
- else
- if pOpenSpot.locH = x then
- if pOpenSpot.locV = (y - 1) then
- move(me, spriteNumber, 0, -1)
- else
- if pOpenSpot.locV = (y + 1) then
- move(me, spriteNumber, 0, 1)
- end if
- end if
- end if
- end if
- end
-
- on move me, spriteNumber, dx, dy
- newloc = sprite(spriteNumber).loc + point(dx * pPieceWidth, dy * pPieceHeight)
- pOpenSpot = pOpenSpot - point(dx, dy)
- sendSprite(spriteNumber, #changeLoc, newloc)
- if pSlideSound <> EMPTY then
- puppetSound(pSlideSound)
- end if
- pMode = #animate
- end
-
- on resetMode me
- pMode = #normal
- if checkForGameOver(me) then
- startTimer()
- repeat while the timer < 200
- updateStage()
- end repeat
- go(pGameOverFrame)
- end if
- end
-
- on checkForGameOver me
- prevLoc = sprite(pFirstSprite).loc
- i = pFirstSprite + 1
- repeat while i <= pLastSprite
- nextLoc = sprite(i).loc
- if nextLoc.locH <> (prevLoc.locH + pPieceWidth) then
- if (nextLoc.locV <> (prevLoc.locV + pPieceHeight)) or (nextLoc.locH <> pUpperLeftLoc.locH) then
- return 0
- end if
- end if
- prevLoc = nextLoc
- i = 1 + i
- end repeat
- return 1
- end
-
- on exitFrame
- if not sprite(2).playing then
- if checkForMovieOver = 0 then
- sprite(2).visible = 0
- sprite(19).visible = 1
- i = 23
- repeat while i <= 25
- sprite(i).visible = 1
- i = 1 + i
- end repeat
- sprite(29).visible = 1
- j = 47
- repeat while j <= 49
- sprite(j).visible = 1
- j = 1 + j
- end repeat
- checkForMovieOver = 1
- end if
- end if
- go(the frame)
- end
-